package reflect;

import java.io.File;

public class ReflectDemo01 {
    public static void main(String[] args) throws Exception{
        /*
        *
        * Java反射API
        * 获取Class对象
        *
         */
        /*
        * 1.类型.class
        * String.class 返回String类型的Class对象
        * 代表String类型的信息(属性、方法、构造器等)*/
        Class cls = String.class;
        System.out.println(cls);
        //获取类型全名:包名.类名
        System.out.println(cls.getName());
        /*
        * 获取File类型的Class对象
         */
        Class cls1 = File.class;
        System.out.println(cls1.getName());
        /*
        *获取基本类型的class类
        * 获得基本类型的Class对象
        * "int.class" 表示整数类型
        * 基本类型的Class只能用.class获得
         */
        Class cls2 = int.class;
        System.out.println(cls2.getName());
        /*
        * 使用Class.forName(类名)获取class对象
        * 根据类名获取Class对象
        * 可能会抛出异常，原因是类名错误
         */
        cls = Class.forName("java.lang.String");
        System.out.println(cls.getName());
        // cls = Class.forName("java.1ang.String");  类名拼写错误抛出异常:ClassNotFoundException
        //System.out.println(cls);
        /*
        *使用ClassLoader加载获得Class对象
        * ClassLoader是类加载器   是Java底层用于加载对象API
        * 提供了方法，动态加载类  得到Class
        * 1.先通过ClassLoader：当前类名.class.getClassLoader()
        * 2.根据类名获取Class
         */
        //获取当前类加载器，坐常用的获取方式
        ClassLoader classLoader = ReflectDemo01.class.getClassLoader();
        //获取String类型的Class对象
        cls = classLoader.loadClass("java.lang.String");
        System.out.println(cls.getName());
        //cls = classLoader.loadClass("java.leng.String");类名拼写错误:ClassNotFoundException
        // System.out.println(cls);
    }
}
